/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package treegen;

import javafx.beans.property.ReadOnlyDoubleProperty;
import javafx.beans.property.ReadOnlyDoubleWrapper;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.geometry.Bounds;
import javafx.scene.Node;

/**
 * Класс для определения границ и центра узла.
 * @author Елена
 */
class Center {

    /** Координата х центра*/
    private ReadOnlyDoubleWrapper centerX = new ReadOnlyDoubleWrapper();
    /** Координата y центра*/
    private ReadOnlyDoubleWrapper centerY = new ReadOnlyDoubleWrapper();

    /** 
     * Контурктор центра
     * @param node 
     */
    public Center(Node node) {
        calcCenter(node.getBoundsInParent());
        node.boundsInParentProperty().addListener(new ChangeListener<Bounds>() {
            @Override
            public void changed(
                    ObservableValue<? extends Bounds> observableValue,
                    Bounds oldBounds,
                    Bounds bounds
            ) {
                calcCenter(bounds);
            }
        });
    }

    /**
     * Рассчитать центр
     * @param bounds границы
     */
    private void calcCenter(Bounds bounds) {
        centerX.set(bounds.getMinX() + bounds.getWidth() / 2);
        centerY.set(bounds.getMinY() + bounds.getHeight() / 2);
    }

    /** 
     * Получить х координату центра
     * @return х координата центра
     */
    ReadOnlyDoubleProperty centerXProperty() {
        return centerX.getReadOnlyProperty();
    }

    /** 
     * Получить y координату центра
     * @return y координата центра
     */
    ReadOnlyDoubleProperty centerYProperty() {
        return centerY.getReadOnlyProperty();
    }

    /**
     * Получить минимальную координату х
     * @param bounds границы
     * @return минимальная координата х
     */
    static public double minX(Bounds bounds) {
        return bounds.getMinX();
    }

    /**
     * Получить максимальную координату х
     * @param bounds границы
     * @return максимальная координата х
     */
    static public double maxX(Bounds bounds) {
        return bounds.getMaxX();
    }

}
